home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / dviware / dvimerge / range.c < prev   
C/C++ Source or Header  |  1993-02-28  |  1KB  |  73 lines

  1. /*
  2.  * range a to b [by c]
  3.  *      generate for-loop values for Shell
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <ctype.h>
  8.  
  9. long    atol();
  10. void    usage();
  11. long    number();
  12. int     isnumeric();
  13.  
  14. int
  15. main(argc, argv)
  16. char **argv;
  17. {
  18.         register long a, b, c;
  19.  
  20.         if (argc < 4 || strcmp(argv[2], "to"))
  21.                 usage();
  22.         a = number(argv[1]);
  23.         b = number(argv[3]);
  24.         c = a <= b? 1: -1;
  25.         if (argc > 5) {
  26.                 if (strcmp(argv[4], "by"))
  27.                         usage();
  28.                 c = number(argv[5]);
  29.         }
  30.         if (c < 0)
  31.                 for (; a >= b; a += c)
  32.                         printf("%ld\n", a);
  33.         else if (c == 0)
  34.                 printf("%ld\n", a);
  35.         else
  36.                 for (; a <= b; a += c)
  37.                         printf("%ld\n", a);
  38.         exit(0);
  39. }
  40.  
  41. void
  42. usage()
  43. {
  44.         fprintf(stderr, "Usage: range n1 to n2 [by n3]\n");
  45.         exit(1);
  46. }
  47.  
  48. long
  49. number(s)
  50. char *s;
  51. {
  52.         if (!isnumeric(s)) {
  53.                 fprintf(stderr, "range: ill-formed number `%s'\n", s);
  54.                 exit(1);
  55.         }
  56.         return(atol(s));
  57. }
  58.  
  59. int
  60. isnumeric(s)
  61. register char *s;
  62. {
  63.         while (*s == ' ' || *s == '\t')
  64.                 s++;
  65.         if (*s == '+' || *s == '-')
  66.                 s++;
  67.         do {
  68.                 if (!isascii(*s) || !isdigit(*s))
  69.                         return(0);
  70.         } while (*++s);
  71.         return(1);
  72. }
  73.